Documentation

Required reading

You MUST set your User-Agent header to something unique and identifiable to your project. Including a website or email address is highly encouraged.

All data is cached for (up to) 4 hours. Please do not make more frequent requests if it can be avoided.

You must handle null values everywhere, but in particular in array/object fields. The API is not consistent about returning null or empty arrays/objects. If invalid data is provided the response may be an error or a null, or an object with all null values.

When the old API went down, all access to the old v2 endpoints was lost. They are all removed. Be aware: Most return data now has different capitalization!

Table of content

V3

Version 3 now relies on the underlying REST API. For the most part the returned data is the same as v2, except the casing is different and some fields got added.

Manifest

top

URL: /api/v3/manifest

Upload a manifest.json from a Curse/Twitch modpack and it will be returned
with the list of files replaced with the projectID-fileID pairs resolved.

The resolved file data will be inserted in an added data field called fileData.
Any unsolvable files will remain, with an added data field fileError.

Required:
- POST: json manifest from Minecraft Modpack, version 1 only.

Optional:
- GET: resolveAddons: Also resolve and add addon data to field called addonData.

V3 History

The history API is meant for statistical overviews.

Downloads

top

URL: /api/v3/history/downloads/<int:game_id>/<string:interval>

Get a list of download numbers in the last interval.
A list of intervals generated is provided via the Feeds endpoint.

The output is a map of addon idsdownload delta. A negative delta is possible.

Feeds

top

URL: /api/v3/history/feeds

Get a list of which feeds are available.
They are periodically generated and updated.
The returned timestamp is when the generation last took place. If that's null, there has been none.

V3 Direct

The direct API is direct (but server-side cached up to 1 hour) authenticated access to the internal Curse api.

Get Addon

top

URL: /api/v3/direct/addon/<int:addon_id>

See Get Addons to request multiple addons at once.
Required:
- addon_id: A single addon ID

Get Addon Changelog

top

URL: /api/v3/direct/addon/<int:addon_id>/file/<int:file_id>/changelog

Required:
- addon_id: A single addon ID
- file_id: A single file ID
Optional:
- GET: markdown or md: If present, converts html to markdown. Might not be accurate.
- GET: fixlinks: If present, replace /linkout?=<url> with the actual direct url.

Get Addon Description

top

URL: /api/v3/direct/addon/<int:addon_id>/description

Required:
- addon_id: A single addon ID
Optional:
- GET: markdown or md: If present, converts html to markdown. Might not be accurate.
- GET: fixlinks: If present, replace /linkout?=<url> with the actual direct url.

Get Addon File

top

URL: /api/v3/direct/addon/<int:addon_id>/file/<int:file_id>

See Get Addons Files to request multiple pairs at once.
Required:
- addon_id: A single addon ID
- file_id: A single file ID

Get Addon Files

top

URL: /api/v3/direct/addon/<int:addon_id>/files

Required:
- addon_id: A single addon ID

Get Addons

top

URL: /api/v3/direct/addon

Required:
- GET id: One or more addon ids. Just specify more than once.

Get Addons Files

top

URL: /api/v3/direct/addon/files

You must have an equal number of addon and file parameters.

Required:
- GET addon: One or more addon ids. Just specify more than once.
- GET file: One or more file ids. Just specify more than once.

Get Categories

top

URL: /api/v3/direct/category

Optional:
- GET slug: Search by slug

Get Category

top

URL: /api/v3/direct/category/<int:category_id>

Required:
- category_id: A single category id.

Get Category By Section

top

URL: /api/v3/direct/category/section/<int:section_id>

Required:
- section_id: A single section id. Idk where to get these from.

Get Category Timestamp

top

URL: /api/v3/direct/category/timestamp

Get the last (Curse internal) update timestamp

top

URL: /api/v3/direct/addon/featured

Required:
- GET: gameId: Which game to search
Optional:
- GET: featuredCount: Defaults to 6
- GET: popularCount: Defaults to 14
- GET: updatedCount: Defaults to 14
- GET: excluded: Exclude an addon ID. Can be specified multiple times.

Get Game

top

URL: /api/v3/direct/game/<int:game_id>

Required:
- game_id: A single game id.

Get Game Timestamp

top

URL: /api/v3/direct/game/timestamp

Get the last (Curse internal) update timestamp

Get Games

top

URL: /api/v3/direct/game

Optional:
- GET supportsAddons: Defaults to False.

Get Mc Modloader

top

URL: /api/v3/direct/minecraft/modloader

No docs, sorry.

Get Mc Modloader By Key

top

URL: /api/v3/direct/minecraft/modloader/<string:key>

No docs, sorry.

Get Mc Modloader By Version

top

URL: /api/v3/direct/minecraft/modloader/<string:key>

todo: how does this work? it's the same url and endpoint as api_v3_direct_get_mc_modloader_by_key...

Get Mc Modloader Timestamp

top

URL: /api/v3/direct/minecraft/modloader/timestamp

Get the last (Curse internal) update timestamp

Get Mc Version

top

URL: /api/v3/direct/minecraft/version/<string:game_version>

No docs, sorry.

Get Mc Version Timestamp

top

URL: /api/v3/direct/minecraft/version/timestamp

Get the last (Curse internal) update timestamp

Get Mc Versions

top

URL: /api/v3/direct/minecraft/version

No docs, sorry.

Get Repo From Slug

top

URL: /api/v3/direct/addon/slug

Might have something to do with WOW, git/hg repos. Requires further research.
Required:
- GET gameSlug: A string. todo: find out what this means
- GET addonSlug: A string. todo: find out what this means

top

URL: /api/v3/direct/addon/search

Required:
- GET: gameId: Which game to search
Optional:
- GET: sectionId (int)
- GET: categoryId (int)
- GET: sort (AddonSortMethod) One of: Featured, Popularity, LastUpdated, Name, Author, TotalDownloads, Category, GameVersion.
- GET: isSortDescending (bool)
- GET: gameVersion (string)
- GET: index (int)
- GET: pageSize (int)
- GET: searchFilter (string)

Get Timestamp

top

URL: /api/v3/direct/addon/timestamp

Get the last (Curse internal) update timestamp

Leftover endpoints

These didn't fall into any of the previous categories.

Deprecated Project File Json

top

URL: /<int:addon_id>/<int:file_id>.json

DEPRECATED

This API is used by MultiMC, which is the only reason it still exists.
Do not used.

V0 Db Dump

top

URL: /api/v0/db/dump

Dumps the whole (addon) DB.
Some members may be null.

DISABLED FOR NOW

WARING: Large!

Optional:
- GET: files: Include files. (WARING: Extra Large!)
- GET: gameId: Filter based on game. Can be specified multiple times.

WARNING Provisional API. Don't use in client side projects.

V0 Db Slug

top

URL: /api/v0/db/slug

Required:
- GET: slug: The slug to look up. Can be specified multiple times.
Optional:
- GET: files: Include files. (WARING: Large)

A null value or missing key means no data was found.

WARNING Provisional API. Don't use in client side projects.

V0 Db Updated Addon

top

URL: /api/v0/db/updated/addon

Get a list of updated addons since the specified timestamp.
Some members may be null.

All files are included, not only those who have been updated since the timestamp.

Required:
- GET: since: Starting timestamp.
Optional:
- GET: files: Include files. (WARING: Large)
- GET: gameId: Filter based on game. Can be specified multiple times.

WARNING Provisional API. Don't use in client side projects.

V0 Db Updated File

top

URL: /api/v0/db/updated/file

Get a list of updated files since the specified timestamp.
Some members may be null.

Required:
- GET: since: Starting timestamp.
Optional:
- GET: addon: Include addon information. (WARING: Large)
- GET: gameId: Filter based on game. Can be specified multiple times.

WARNING Provisional API. Don't use in client side projects.